# Домашнее задание к занятию 5. Превращаем программу ToDo в бота

## Задание 1
Расширьте функциональность бота возможностью на ваш выбор.  
Примеры дополнительных возможностей: 
* Выводить ошибку при добавлении задачи, в которой меньше 3х символов.
* Печатать задачи на несколько дат: принимать в команде `print` не одну дату, а произвольное количество.
* При добавлении задачи учитывать отдельным параметром ее категорию. При выводе печатать категории задач со знаком @: Помыть посуду @Домашние дела.

### Ответ

Расширил функциональность бота на все 3 пункта:

```python
from random import choice
import telebot

token = 'my telegrambot token'

bot = telebot.TeleBot(token)

RANDOM_TASKS = ['Написать Гвидо письмо', 'Выучить Python', 'Записаться на курс в Нетологию', 'Посмотреть 4 сезон Рик и Морти']

todos = dict()

HELP = '''
Список доступных команд:
/print, /show  - напечать все задачи на заданную дату
/todo, /add - добавить задачу
/random - добавить на сегодня случайную задачу
/help - Напечатать help
'''

@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, f'Привет!\n Это мой первый ToDo Телеграм-Бот\n {HELP}')

def add_todo(date, task):
    date = date.lower()
    if todos.get(date) is not None:
        todos[date].append(task)
    else:
        todos[date] = [task]

@bot.message_handler(commands=['help'])
def help(message):
    bot.send_message(message.chat.id, HELP)


@bot.message_handler(commands=['random'])
def random(message):
    task = choice(RANDOM_TASKS)
    add_todo('сегодня', task)
    bot.send_message(message.chat.id, f'Задача "{task}" добавлена на "сегодня"')


@bot.message_handler(commands=['add', 'todo'])
def add(message):
    _, date, tail = message.text.split(maxsplit=2)
    task = ' '.join([tail])
    if len(tail) > 3:
        add_todo(date, task)
        if '@' in task:
            category = task.split('@')[1]
            taskr = task.split('@')[0]
            bot.send_message(message.chat.id, f'Задача "{taskr}" добавлена на дату "{date}" в категорию @{category}')
        else:
            bot.send_message(message.chat.id, f'Задача "{task}" добавлена на дату "{date}"')
    else:
        bot.send_message(message.chat.id, 'Укажите в названии задачи более 3х символов')


@bot.message_handler(commands=['show', 'print'])
def show(message):
    command = message.text.split(maxsplit=1)
    tasks = ''
    if len(command) < 2:
        bot.send_message(message.chat.id, 'Укажите дату')
    else:
        dates_lower = command[1].lower()
        dates = dates_lower.split()
        for date in dates:
            if date in todos:
                tasks = date.upper() + "\n"
                for task in todos[date]:
                    if '@' in task:
                        category = task.split('@')[1]
                        taskr = task.split('@')[0]
                        tasks += f'[ ] {taskr} @{category}\n'
                    else:
                        tasks += f'[ ] {task}\n'
            else:
                tasks = f'"{date.upper()}" Такой даты нет'
            bot.send_message(message.chat.id, tasks)

bot.polling(none_stop=True)
```
